今天來介紹 Vue 3 的 Composition API。
Vue 2 元件最大的痛點就是,相關邏輯必須被強制的拆分到不同的 Lifecycle Hooks裡頭,這裡是官方提供的說明影片,簡單來說,使用 Composition API 可以降低元件複雜度,並且把邏輯從各個 Lifecycle hooks 中抽離出來,達到高內聚、低耦合的優點。
大家在前面幾天已經認識到了 Lifecycle hooks,以及 reactivity objects,相近大家也常常注意到一個方法 setup,那麼 setup 方法是什麼?該怎麼用?
暴力點來說呢,以前寫在 data、computed、watch、methods .... 的東西現在都改寫在 setup 方法中即可。
這邊是一個簡單的元件:
<template>
  <div>
    <button @click="increase">Click</button>
    <span>{{ count }}</span>
  </div>
</template>
<script>
import { ref, watch } from 'vue'
export default {
  name: 'MyComponent',
  setup() {
    const count = ref(0)
    const increase = () => count.value += 1
    watch(count, () => {
        console.log(count.value)
    })
    return { increase, count }
  }
}
</script>
你應該已經發現,像這樣把所有東西寫在 setup 裡面,很明顯的程式很快會變得複雜且龐大,但請稍安勿躁,讓我們稍微改寫一下上面的範例,我們將它拆成兩隻程式:
import { ref, watch } from 'vue'
export default function useCounter(initialNumber = 0) {
    const count = ref(initialNumber)
    const increase = () => count.value += 1
    watch(count, () => {
        console.log(count.value)
    })
    return { count, increase }
}
<template>
  <div>
    <button @click="increase">Click</button>
    <span>{{ count }}</span>
  </div>
</template>
<script>
import useCounter from './useCounter'
export default {
  name: 'MyComponent',
  setup() {
    const { increase, count } = useCounter(0)
    return { increase, count }
  }
}
</script>
不一會兒,我們得元件乾淨許多,Counter 的邏輯也已經被放在同一隻程式裡頭,我的案例很簡單,官網有提供一個比較貼近真實的案例的複雜元件。
Composition API 就這麼簡單。